package com.zhu.pre.service;

import com.sanploy.common.domain.Goods;
import com.sanploy.common.domain.dto.ReduceStockDto;
import com.sanploy.common.domain.vo.GoodsDetailVo;
import com.sanploy.common.domain.vo.Page;
import com.sanploy.common.vo.BaseException;

import java.util.List;

/**
 * Created by zhu yingzhi on 2017/9/21.
 * @author yingzhi zhu
 * 手机商品 逻辑处理接口
 */
public interface MGoodsService {
    /**
     * 分页查找所有的商品 按时间排序
     * @param currentPage 当前页码
     * @param pageSize 页数
     * @return 商品的分页实体类
     */
    Page<Goods> selectAllByPage(int currentPage, int pageSize);

    /**
     * 通过category（分类）分页查找所有的商品 按时间排序
     * @param currentPage 当前页码
     * @param pageSize 页数
     * @param catId 分类id
     * @return 商品的分页实体类
     */
    Page<Goods> selectByCatIdPage(int currentPage, int pageSize, Long catId);

    /**
     * 分页查找所有的热门商品 按热度排序
     * @param currentPage 当前页码
     * @param pageSize 页数
     * @return 商品的分页实体类
     */
    Page<Goods> selectByHotPage(int currentPage, int pageSize);

    /**
     * 分页查找所有的精品商品 按精品度排序
     * @param currentPage 当前页码
     * @param pageSize 页数
     * @return 商品的分页实体类
     */
    Page<Goods> selectByBestPage(int currentPage, int pageSize);

    /**
     * 通过id 查找商品
     * @param goodsId 商品id
     * @return 商品实体类
     */
    Goods selectOne(Long goodsId);

    /**
     * 通过商品id 查找商品的详情VO对象
     * @param id 商品id
     * @return  商品的详情VO对象
     * @throws BaseException 自定义异常
     */
    GoodsDetailVo getGoodsById(Long id) throws BaseException;



    /**
     * 恢复库存
     * @param reduceStockDto 库存对象
     */
    void restoreGoodsStock(ReduceStockDto reduceStockDto);


    /**
     * 减少商品库存
     * @param reduceStockDto 库存对象
     */
    void reduceGoodsStock(ReduceStockDto reduceStockDto);

    /**
     * 通过List id获取商品
     * @param idList 商品id
     * @return 商品列表
     * @throws BaseException 各种异常
     */
    public List<Goods> getGoodsByIdList(List<Long> idList) throws BaseException;
}
